﻿// Процедура получает список сохраненных настроек для переданных форм
//
// Параметры :
//  СписокФорм - список форм, для которых нужно получить список настроек
//  Пользователь - имя пользователя, настройки форм которого нужно получить
//  СписокФормССохраненнымиНастройками - список значений в который будут добавлены настройки форм.
Процедура ПолучитьСписокСохраненныхНастроек(Пользователь, СписокФормССохраненнымиНастройками) Экспорт
	
	Перем Представление;
	Перем Картинка;
	
	ТипНастроек = "/НастройкиФормы";
	ДлинаСтрокиТипаНастроек = СтрДлина(ТипНастроек);
	КритерийОтбора = Новый Структура("Пользователь", Пользователь);
	ВыборкаНастроек = ХранилищеСистемныхНастроек.Выбрать(КритерийОтбора);
	
	Пока ВыборкаНастроек.Следующий() Цикл
		
		Если Прав(ВыборкаНастроек.КлючОбъекта, ДлинаСтрокиТипаНастроек) = ТипНастроек Тогда
		
			Представление = "";
			Картинка = Неопределено;
			
			ПервыйСлэш = Найти(ВыборкаНастроек.КлючОбъекта, "/");
			ИмяМетаданныхФорма = Лев(ВыборкаНастроек.КлючОбъекта, ПервыйСлэш - 1);			
			
			ЭлементыИмениМетаданныхФормы = СтрЗаменить(ИмяМетаданныхФорма, ".", Символы.ПС);
			ЧислоЭлементовИмени = СтрЧислоСтрок(ЭлементыИмениМетаданныхФормы);
			
			Если ЧислоЭлементовИмени > 1 Тогда
				
				ИмяКлассаМетаданных = СтрПолучитьСтроку(ЭлементыИмениМетаданныхФормы, 1);
				ИмяОбъектаМетаданных = СтрПолучитьСтроку(ЭлементыИмениМетаданныхФормы, 2);
				Картинка = ПолучитьКартинкуКлассаМетаданных(ИмяКлассаМетаданных);
				
				ИмяОбъектаМетаданных = ИмяКлассаМетаданных + "." + ИмяОбъектаМетаданных;
				ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных);
				
				Если ОбъектМетаданных <> Неопределено Тогда
					Представление = ИмяКлассаМетаданных + ". " + ОбъектМетаданных.Представление() + ". ";
				Иначе
					Представление = ИмяКлассаМетаданных + ". " + ИмяОбъектаМетаданных + ". ";
				КонецЕсли;
			
				ОбъектМетаданныхФорма = Метаданные.НайтиПоПолномуИмени(ИмяМетаданныхФорма);
				
				Если ОбъектМетаданныхФорма <> Неопределено Тогда
					Представление = Представление + ОбъектМетаданныхФорма.Представление();
				Иначе
					Представление = Представление + СтрПолучитьСтроку(ЭлементыИмениМетаданныхФормы, ЧислоЭлементовИмени);
				КонецЕсли;
				
			Иначе
				
				Представление = ИмяМетаданныхФорма;
				
			КонецЕсли;
			
			СписокФормССохраненнымиНастройками.Добавить(ИмяМетаданныхФорма, Представление, Ложь, Картинка);
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

// Функция получения картинки класса метаданных
//
// Параметры :
//  ИмяКлассаМетаданных - имя класса метаданных, для которого запрашивается картинка
// Возвращает :
//  Картинку класса метаданных
Функция ПолучитьКартинкуКлассаМетаданных(ИмяКлассаМетаданных)
	
	Если ИмяКлассаМетаданных = "Справочник" Тогда
		Возврат БиблиотекаКартинок.Справочник;
	ИначеЕсли ИмяКлассаМетаданных = "КритерийОтбора" Тогда
		Возврат БиблиотекаКартинок.КритерийОтбора;
	ИначеЕсли ИмяКлассаМетаданных = "ХранилищеНастроек" Тогда
		Возврат БиблиотекаКартинок.ХранилищеНастроек;
	ИначеЕсли ИмяКлассаМетаданных = "Документ" Тогда
		Возврат БиблиотекаКартинок.Документ;
	ИначеЕсли ИмяКлассаМетаданных = "ЖурналДокументов" Тогда
		Возврат БиблиотекаКартинок.ЖурналДокументов;
	ИначеЕсли ИмяКлассаМетаданных = "Перечисление" Тогда
		Возврат БиблиотекаКартинок.Перечисление;
	ИначеЕсли ИмяКлассаМетаданных = "Отчет" Тогда
		Возврат БиблиотекаКартинок.Отчет;
	ИначеЕсли ИмяКлассаМетаданных = "Обработка" Тогда
		Возврат БиблиотекаКартинок.Обработка;
	ИначеЕсли ИмяКлассаМетаданных = "РегистрСведений" Тогда
		Возврат БиблиотекаКартинок.РегистрСведений;
	ИначеЕсли ИмяКлассаМетаданных = "РегистрНакопления" Тогда
		Возврат БиблиотекаКартинок.РегистрНакопления;
	ИначеЕсли ИмяКлассаМетаданных = "ПланВидовХарактеристик" Тогда
		Возврат БиблиотекаКартинок.ПланВидовХарактеристик;
	ИначеЕсли ИмяКлассаМетаданных = "ПланСчетов" Тогда
		Возврат БиблиотекаКартинок.ПланСчетов;
	ИначеЕсли ИмяКлассаМетаданных = "РегистрБухгалтерии" Тогда
		Возврат БиблиотекаКартинок.РегистрБухгалтерии;
	ИначеЕсли ИмяКлассаМетаданных = "ПланВидовРасчета" Тогда
		Возврат БиблиотекаКартинок.ПланВидовРасчета;
	ИначеЕсли ИмяКлассаМетаданных = "РегистрРасчета" Тогда
		Возврат БиблиотекаКартинок.РегистрРасчета;
	ИначеЕсли ИмяКлассаМетаданных = "БизнесПроцесс" Тогда
		Возврат БиблиотекаКартинок.БизнесПроцесс;
	ИначеЕсли ИмяКлассаМетаданных = "Задача" Тогда
		Возврат БиблиотекаКартинок.Задача;
	КонецЕсли;
	
КонецФункции

// Процедура позволяет скопировать настройки форм от одного пользователя другому
//
// Параметры :
//  ПользовательИсточник - имя пользователя, настройки форм которого копируются
//  ПользователиПриемник - имя пользователя которому копируются настройки форм
//  МассивНастроекДляКопирования - имена форм, настройки которых нужно скопировать
Процедура СкопироватьНастройкиФорм(ПользовательИсточник, ПользователиПриемник, МассивНастроекДляКопирования) Экспорт
	
	Для каждого Элемент Из МассивНастроекДляКопирования Цикл
		
		Настройка = ХранилищеСистемныхНастроек.Загрузить(Элемент + "/НастройкиФормы", "", , ПользовательИсточник);
		
		Если Настройка <> Неопределено Тогда
			
			Для каждого ПользовательПриемник Из ПользователиПриемник Цикл
				
				ХранилищеСистемныхНастроек.Сохранить(Элемент + "/НастройкиФормы", "", Настройка, , ПользовательПриемник);
				
			КонецЦикла;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

// Процедура позволяет удалить настройки форм
//
// Параметры :
//  Пользователь - имя пользователя, настройки форм которого удаляются
//  МассивНастроекДляУдаления - имена форм, настройки которых нужно удалить
Процедура УдалитьНастройкиФорм(Пользователь, МассивНастроекДляУдаления) Экспорт
	
	Для каждого Элемент Из МассивНастроекДляУдаления Цикл
		
		ХранилищеСистемныхНастроек.Удалить(Элемент + "/НастройкиФормы", "", Пользователь);
		
	КонецЦикла;
	
КонецПроцедуры
	
